package com.zy.explore.design.patterns.observer;

import org.assertj.core.util.Lists;

import java.util.List;

/**
 * 被观察者
 *
 * @author ZY
 * @date 2021/11/02
 */
public class Observerable {

    /**
     * 被观察者可能同时存在多个观察者
     */
    private List<Observer> observers = Lists.newArrayList();

    /**
     * 被观察者的状态
     */
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        notifyAllObservers(state);
    }

    /**
     * 添加观察者
     *
     * @param observer 观察者
     */
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    /**
     * 删除服务器
     *
     * @param observer 观察者
     */
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 通知所有的观察者
     *
     * @param state 状态
     */
    public void notifyAllObservers(int state) {
        if (state == 1) {
            System.out.println("不是通知的状态");
            return;
        }
        for (Observer observer : observers) {
            observer.doEvent(state);
        }
    }

}
